package cn.lil.servlet;

import cn.lil.model.*;
import cn.lil.service.BearingService;
import cn.lil.service.OrderService;
import jakarta.servlet.*;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.*;

import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

@WebServlet(name = "MySubmitOrderServlet", value = "/MySubmitOrderServlet")
public class MySubmitOrderServlet extends HttpServlet {
    OrderService orderService = new OrderService();
    BearingService bearingService = new BearingService();

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取当前会话中的user对象
        User u = (User) request.getSession().getAttribute("user");
        int userId = u.getId();
        System.out.println(userId + "  user的id");

        // 根据用户id获取已提交的order
        List<Order> orderList = null;
        try {
            orderList = orderService.selectOrderList(1, userId);
        } catch (SQLException e) {
            e.printStackTrace();
            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Error fetching orders");
            return;
        }

        if (orderList != null && !orderList.isEmpty()) {
            List<OrderListWidthBstr> orderListWidthBstrList = new ArrayList<>();

            for (Order order : orderList) {
                OrderListWidthBstr orderListWidthBstr = new OrderListWidthBstr();
                // 假设您有一个方法来设置订单ID或整个订单对象（这里以订单ID为例）
                orderListWidthBstr.setOrder(order);

                List<OrderItem> orderItemList;
                try {
                    orderItemList = orderService.selectAllitem(order.getId());
                } catch (SQLException e) {
                    e.printStackTrace();
                    // 处理单个订单项获取失败的情况，可能需要记录日志或跳过当前订单
                    continue; // 跳过当前循环迭代，处理下一个订单
                }

                StringBuilder bstrBuilder = new StringBuilder();
                for (OrderItem oi : orderItemList) {
                    int bearingId = oi.getBearingId();
                    try {
                        Bearing b = bearingService.selectBearingById(bearingId);
                        if (bstrBuilder.length() > 0) {
                            bstrBuilder.append(", "); // 使用逗号分隔轴承信息
                        }
                        bstrBuilder.append(b.getType()).append(" * ").append(oi.getAmount());
                    } catch (SQLException e) {
                        e.printStackTrace();
                        // 处理轴承获取失败的情况，可能需要记录日志或跳过当前轴承
                    }
                }

                // 设置构建好的字符串到OrderListWidthBstr对象
                orderListWidthBstr.setBstr(bstrBuilder.toString());

                // 将填充好的对象添加到列表中
                orderListWidthBstrList.add(orderListWidthBstr);
            }

            // 将订单列表设置到会话中（如果需要的话）
            request.getSession().setAttribute("orderListWidthBstrList", orderListWidthBstrList);
            System.out.println(orderListWidthBstrList);
            // 转发请求到JSP页面
            request.getRequestDispatcher("/myOrder.jsp").forward(request, response);
        } else {
            // 处理订单列表为空的情况，可能需要向用户显示消息
            response.sendRedirect("/noOrders.jsp"); // 假设有一个页面用于显示没有订单的消息
        }
    }


    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//      获取当前会话中的user对象
        User u = (User) request.getSession().getAttribute("user");
        int userId = u.getId();
        System.out.println(userId + "  user的id");

        // 根据用户id获取已提交的order
        List<Order> orderList = null;
        try {
            orderList = orderService.selectOrderList(1, userId);
        } catch (SQLException e) {
            e.printStackTrace();
            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Error fetching orders");
            return;
        }

        if (orderList != null && !orderList.isEmpty()) {
            List<OrderListWidthBstr> orderListWidthBstrList = new ArrayList<>();

            for (Order order : orderList) {
                OrderListWidthBstr orderListWidthBstr = new OrderListWidthBstr();
                // 假设您有一个方法来设置订单ID或整个订单对象（这里以订单ID为例）
                orderListWidthBstr.setOrder(order);

                List<OrderItem> orderItemList;
                try {
                    orderItemList = orderService.selectAllitem(order.getId());
                } catch (SQLException e) {
                    e.printStackTrace();
                    // 处理单个订单项获取失败的情况，可能需要记录日志或跳过当前订单
                    continue; // 跳过当前循环迭代，处理下一个订单
                }

                StringBuilder bstrBuilder = new StringBuilder();
                for (OrderItem oi : orderItemList) {
                    int bearingId = oi.getBearingId();
                    try {
                        Bearing b = bearingService.selectBearingById(bearingId);
                        if (bstrBuilder.length() > 0) {
                            bstrBuilder.append(", "); // 使用逗号分隔轴承信息
                        }
                        bstrBuilder.append(b.getType()).append(" * ").append(oi.getAmount());
                    } catch (SQLException e) {
                        e.printStackTrace();
                        // 处理轴承获取失败的情况，可能需要记录日志或跳过当前轴承
                    }
                }

                // 设置构建好的字符串到OrderListWidthBstr对象
                orderListWidthBstr.setBstr(bstrBuilder.toString());

                // 将填充好的对象添加到列表中
                orderListWidthBstrList.add(orderListWidthBstr);
            }

            // 将订单列表设置到会话中（如果需要的话）
            request.getSession().setAttribute("orderListWidthBstrList", orderListWidthBstrList);

            // 转发请求到JSP页面
            request.getRequestDispatcher("/myOrder.jsp").forward(request, response);
        } else {
            // 处理订单列表为空的情况，可能需要向用户显示消息
            response.sendRedirect("/noOrders.jsp"); // 假设有一个页面用于显示没有订单的消息
        }

    }
}
